#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;

int jump(vector<int>& arr) {
    int n = arr.size();
    // 保存中间结果: steps[i]保存到达i的最少步数
    vector<int> steps(n, -1);
    steps[0] = 0;
    // BFS的核心：使用一个队列保存搜索节点
    queue<int> q;
    q.push(0);
    while (!q.empty()) {
        // 首先取出当前点
        int i = q.front();
        q.pop();
        int s = steps[i];
        // 从当前点搜索，按题意可走1-6步
        for (int j = i + 1; j < n && j <= i + 6; j++) {
            // 目标位置
            int t = j;
            // 判断是否有跳转
            if (arr[t] >= 0) t = arr[t];
            // BFS中第一次搜索到终点就是最优解，可以直接返回
            if (t == n - 1) return s + 1;
            // 计算结果并将目标点保存进队列
            if (steps[t] < 0) {
                steps[t] = s + 1;
                q.push(t);
            }
        }
    }
    // 队列搜索完毕还没找到终点，说明无解
    return -1;
}

int main() {
    vector<int> arr = {-1, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, -1};
    int ans = jump(arr);
    cout << "总步数：" << ans << endl;
    return 0;
}